//现有一串神秘的密文 ciphertext，经调查，密文的特点和规则如下： 
//
// 
// 密文由非负整数组成 
// 数字 0-25 分别对应字母 a-z 
// 
//
// 请根据上述规则将密文 ciphertext 解密为字母，并返回共有多少种解密结果。 
//
// 
//
// 
//
// 示例 1： 
//
// 
//输入：ciphertext = 216612
//输出：6
//解释：216612 解密后有 6 种不同的形式，分别是 "cbggbc"，"vggbc"，"vggm"，"cbggm"，"cqgbc" 和 "cqgm" 
//
// 
//
// 提示： 
//
// 
// 0 <= ciphertext < 2³¹ 
// 
//
// 
//
// Related Topics 字符串 动态规划 👍 621 👎 0


package LeetCode.editor.cn;

/**
 * @author ldltd
 * @date 2025-05-15 22:23:31
 * @description LCR 165.解密数字
 */
public class BaShuZiFanYiChengZiFuChuanLcof{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 BaShuZiFanYiChengZiFuChuanLcof fun=new BaShuZiFanYiChengZiFuChuanLcof();
	 	 Solution solution = fun.new Solution();
			solution.crackNumber(216612);
	 }
	//2 1 6 6 1 2  cbggbc
	//21 6 6 1 2 vggbc
	//21 6 6 12  v g g m
	//2 1 6 6 12 cbggm
	//2 16 6 1 2  cqgbc
	//2 16 6 12  cqgm
	//1 2 3 4

	// 2 1
	// 21

	// 2 1 6
	//21 6
	//2 16

	//2 1 6 6
	//21 6 6
	//2 16 6

	//2 1 6 6 1
	//21 6 6 1
	//2 16 6 1

	//2 1 6 6 1 2
	//21 6 6 1 2
	//21 6 6 12
	//2 16 6 12
	//2 16 6 1 2
	//2 1 6 6 12

	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int crackNumber1(int ciphertext) {
		char[] charArray = String.valueOf(ciphertext).toCharArray();
		int n = charArray.length;
		if (n == 0) return 0;
		int[] dp = new int[n+1];
		dp[0]=1;dp[1]=1;
		for (int i = 2; i <=n; i++) {
			dp[i]=dp[i-1];
			if (charArray[i-2] == '0') {
				continue;
			}
			if ((charArray[i-2]-'0')*10+charArray[i-1]-'0' <26) {
				dp[i]+=dp[i-2];
			}
		}
		return dp[n];
	}
	//空间优化
	public int crackNumber(int ciphertext) {
		String src = String.valueOf(ciphertext);
		int p = 0, q = 0, r = 1;
		for (int i = 0; i < src.length(); ++i) {
			p = q;
			q = r;
			r = 0;
			r += q;
			if (i == 0) {
				continue;
			}
			String pre = src.substring(i - 1, i + 1);
			if (pre.compareTo("25") <= 0 && pre.compareTo("10") >= 0) {
				r += p;
			}
		}
		return r;
	}

}
//leetcode submit region end(Prohibit modification and deletion)

}
